package com.icss.train_sys_back.utils;

import com.baidu.aip.face.AipFace;
import org.json.JSONObject;

import java.util.HashMap;

/**
 * 提取工具类，AipFace是人脸识别的Java客户端，为使用人脸识别的开发人员提供了一系列的交互方法。
 * @author: mhm
 **/
public class FaceUtils {
    //设置APPID/AK/SK
    //设置APPID/AK/SK
    public static final String APP_ID = "115868453";
    public static final String API_KEY = "d6zys50snemcFZ5GARLKZ4Mo";
    public static final String SECRET_KEY = "PucGc72oQoZQVAjVFQjdnlBlIPTbbufP";

    static AipFace client = null;
    //静态块，类加载的时候只执行一次
    static {
        // 初始化一个AipFace
        client = new AipFace(APP_ID, API_KEY, SECRET_KEY);

        // 可选：设置网络连接参数
        client.setConnectionTimeoutInMillis(2000);
        client.setSocketTimeoutInMillis(60000);
    }

    /**
     * 人脸注册
     * @param image  注册的图片
     * @param userInfo  用户资料
     * @param userId 用户编号
     * @param groupId  人脸库用户组
     * @return  调用百度AI返回的结果（json）
     */
    public static String faceRegister(String image,String userInfo,String userId,String groupId){
        // 传入可选参数调用接口
        HashMap<String, String> options = new HashMap<String, String>();

        //user_info，不是必选，String    , 用户资料，长度限制256B
        options.put("user_info", userInfo);
        //图片质量控制 NONE: 不进行控制 LOW:较低的质量要求
        // NORMAL: 一般的质量要求 HIGH: 较高的质量要求 默认 NONE
        options.put("quality_control", "NORMAL");
        //活体检测控制, LOW:较低的活体要求(高通过率 低攻击拒绝率)
        options.put("liveness_control", "LOW");
        // 操作方式,REPLACE : 当对此user_id重复注册时,则会用新图替换库中该user_id下所有图片,默认使用APPEND
        options.put("action_type", "REPLACE");
        //图片类型 BASE64:图片的base64值，base64编码后的图片数据，编码后的图片大小不超过2M；
        String imageType = "BASE64";

        // 人脸注册,调用百度AI接口
        JSONObject res = client.addUser(image, imageType, groupId, userId, options);

        return  res.toString(2);
    }

    /**
     * 人脸登录(调用百度AI中人脸搜索的额方法)
     * @param image  图片
     * @param groupIdList  人脸库用户组
     * @return
     */
    public static String faceLogin(String image,String groupIdList){
        // 传入可选参数调用接口
        HashMap<String, String> options = new HashMap<String, String>();
        //匹配阈值（设置阈值后，score低于此阈值的用户信息将不会返回） 最大100 最小0 默认80
        options.put("match_threshold", "90");
        //图片质量控制  NORMAL: 一般的质量要求
        options.put("quality_control", "NORMAL");
        //活体检测控制 LOW:较低的活体要求(高通过率 低攻击拒绝率)
        options.put("liveness_control", "LOW");

        String imageType = "BASE64";

        // 调用百度AI , 人脸搜索
        JSONObject res = client.search(image, imageType, groupIdList, options);
        return res.toString(2);
    }
}
